package com.operator.Activitys.activity;

import android.os.Handler;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.gson.Gson;
import com.operator.Activitys.R;
import com.operator.Activitys.activity.base.BaseActivity;
import com.operator.Activitys.adapter.PurchaseOrderAdapter;
import com.operator.Activitys.bean.PurchaseOrder;
import com.operator.Activitys.bean.User;
import com.operator.Activitys.http.manager.UserManager;
import com.operator.Activitys.utils.Constant;
import com.operator.Activitys.utils.ToastUtils;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

import org.simple.eventbus.Subscriber;
import org.simple.eventbus.ThreadMode;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;

/**
 * 项目名称：金泽云 手机app
 * 类描述：进货订单
 * 创建人：张飞祥
 * 创建时间：2018/5/29 10:09
 * 修改人：张飞祥
 * 修改时间：2018/5/29 10:09
 * 修改备注：
 */
public class PurchaseOrderActivity extends BaseActivity {

    //返回按钮
    @Bind(R.id.iv_return)
    ImageView ivReturn;
    //标题
    @Bind(R.id.tv_title)
    TextView tvTitle;
    //数据列表
    @Bind(R.id.rv_list)
    RecyclerView rvList;
    //加载圆圈
    @Bind(R.id.layout_refresh)
    SmartRefreshLayout layoutRefresh;
    //下拉刷新
    @Bind(R.id.header_material)
    MaterialHeader headerMaterial;

    //TODO 初始化网络请求
    public UserManager mApiManager;

    //TODO 当前 内存中 用户信息
    private User mACacheUser = null;

    //TODO http 变量
    //请求哪一页
    private int mIndex = 1;
    //每页几条
    private int mPageCount = 10;
    //上拉加载 没有数据 page 是否 +1
    private boolean mPullPageFlag = true;

    //TODO 通讯供求 信息
    //adapter 适配器
    private PurchaseOrderAdapter mAdapter = null;
    //list 数组集合
    private List<PurchaseOrder> mPoList = null;

    @Override
    protected void initUI() {
        setContentView(R.layout.act_purchase_order);

        //网络请求接口 常驻方法
        mApiManager = mApiManager.getUserApiManager(this, this.getTaskId());
        //设置下拉刷新小圆圈 颜色
        headerMaterial.setColorSchemeColors(getResources().getColor(R.color.colorPrimary));

        //TODO 获取内存用户实体
        Gson gson = new Gson();
        mACacheUser = gson.fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);

        //标题
        tvTitle.setText("进货订单");
        //显示返回按钮
        ivReturn.setVisibility(View.VISIBLE);
        //返回按钮 点击事件
        ivReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    @Override
    protected void initData() {
        //TODO 开始网络请求
        initHttp();
        //TODO 上拉加载
        initLoadMoreListener();
        //TODO 下拉刷新
        initPullRefresh();
    }

    /**
     * http 获取 通讯供求 网络请求
     */
    private void initHttp() {
        //清空列表
        if (mPoList != null && mPoList.size() > 0)
            mPoList.clear();
        //初始化全局 list
        mPoList = new ArrayList<>();
        //设置 为 首次加载
        mApiManager.getType(Constant.FIRST_LOAD);
        //显示自动刷新
        layoutRefresh.autoRefresh();
        //初始化 上拉加载  page 允许 +1
        mPullPageFlag = true;
        //初始化页数
        mIndex = 1;

        //开始网络请求
        mApiManager.userPurchaseOrderList(mACacheUser.getId(), mIndex, mPageCount);

    }

    /**
     * 上拉加载数据
     */
    private void initLoadMoreListener() {
        layoutRefresh.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                //设置文字上拉加载更多
                mApiManager.getType(Constant.PULLUP_LOAD_MORE);
                //如果 为 true 可以 查看下一页
                if (mPullPageFlag) {
                    //数据请求
                    mIndex = mIndex + 1;
                }
                //TODO 上拉加载 网络请求
                mApiManager.userPurchaseOrderList(mACacheUser.getId(), mIndex, mPageCount);
            }
        });
    }

    /**
     * 下拉刷新操作
     */
    private void initPullRefresh() {
        layoutRefresh.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                //TODO 开始刷新
                initHttp();
                //圆圈延时 3s销毁
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //TODO View 非空判断
                        if (layoutRefresh != null) {
                            //结束刷新
                            layoutRefresh.finishRefresh();
                        }
                    }
                }, 3000);
            }
        });
    }


    /**
     * 进货订单 列表 报错
     */
    @Subscriber(tag = Constant.BUS_MY_PURCHASE_ORDER_LIST_ERROR, mode = ThreadMode.MAIN)
    public void initPoListError(String httpError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutRefresh != null) {
                    //结束刷新
                    layoutRefresh.finishRefresh(false);
                    //结束加载
                    layoutRefresh.finishLoadMore(false);
                    //弹出提示
                    ToastUtils.showShort(PurchaseOrderActivity.this, "加载失败，网络连接不稳定！");
                }
            }
        }, 1000);
    }


    /**
     * 进货订单 列表  首次数据加载
     */
    @Subscriber(tag = Constant.BUS_MY_PURCHASE_ORDER_LIST, mode = ThreadMode.MAIN)
    public void initPoList(final List<PurchaseOrder> list) {

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (rvList != null) {
                    if (list != null && list.size() != 0) {
                        //设置 全局"宽带订单"变量 数据
                        mPoList.addAll(list);
                        //设置 通讯供求 适配器
                        mAdapter = new PurchaseOrderAdapter(PurchaseOrderActivity.this, list);

                        //添加 适配器 样式
                        rvList.setLayoutManager(new LinearLayoutManager(PurchaseOrderActivity.this, LinearLayoutManager.VERTICAL, false));
                        //添加 适配器
                        rvList.setAdapter(mAdapter);
                        //显示提示
                        ToastUtils.showShort(PurchaseOrderActivity.this, "刷新成功");
                    } else {
                        //弹出提示
                        ToastUtils.showShort(PurchaseOrderActivity.this, "还没有进货订单数据！");
                    }
                    //隐藏加载小圆圈
                    layoutRefresh.finishRefresh();
                }
            }
        }, 1000);
    }

    /**
     * 进货订单 列表  上拉加载数据
     */
    @Subscriber(tag = Constant.BUS_MY_PURCHASE_ORDER_LIST_FOOT)
    public void initPoListFoot(List<PurchaseOrder> list) {
        final List<PurchaseOrder> footList = list;

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutRefresh != null) {
                    /**
                     * 判断是否有数据
                     * 当 返回列表 数据 size 0 没有更多数据可加载了
                     */
                    if (footList.size() == 0) {
                        //page 不允许 + 1
                        mPullPageFlag = false;
                        //显示提示
                        ToastUtils.showShort(PurchaseOrderActivity.this, "没有更多数据了");
                    } else {
                        //page 允许 + 1
                        mPullPageFlag = true;
                        //填充上拉加载数据，加载到adapter里面
                        mPoList.addAll(footList);
                        if (mAdapter != null) {
                            //加载到adapter里面
                            mAdapter.addFooterItem(footList);
                        }
                        //显示提示
                        ToastUtils.showShort(PurchaseOrderActivity.this, "更新了 " + footList.size() + " 条目数据");
                    }
                    //结束加载
                    layoutRefresh.finishLoadMore();
                }
            }
        }, 1000);
    }
}
